﻿var namespace = namespace || {};

namespace.constructor = function () {
    /// <field name="module" type="Object">Generic module.</field>

    'use strict';
};

namespace.module = (function () {
    'use strict';

    var m = {};

    m.constructor = function () {
        /// <field name="someEnum" type="Object">Enum for heights.</field>
    };

    m.MyClass = function (default1, default2) {
        /// <summary>MyClass summary.</summary>
    }

    m.MyClass.prototype.someMethod = function (something) {
        /// <summary>someMethod of MyClass.</summary>
    }

    m.MyClass.prototype.someOtherProperty = 1234;

    Object.defineProperty(m.MyClass.prototype, 'someProperty', {
        get: function () {
            return 1234;
        },
        set: function (value) { }
    })

    m.MyClass.staticMethod = function (param1, param2) {
        /// <signature>
        ///     <summary>staticMethod of MyClass.</summary>
        /// </signature>
        /// <signature>
        ///     <summary>Overload of staticMethod of MyClass.</summary>
        /// </signature>
    }

    m.someEnum = {
        high: 1000,
        low: 1001
    };

    m.someEnum.constructor = function () {
        /// <field name="high" type="Number">High enum value.</field>
        /// <field name="low" type="Number">Low enum value.</field>
    };

    m.myPublicMethod = function () {
        /// <summary>Summary for myPublicMethod.</summary>
    };

    m.MyChildClass = function () {
        /// <summary>MyChildClass summary.</summary>
    };

    m.MyChildClass.prototype = Object.create(m.MyClass.prototype);
    m.MyChildClass.prototype.constructor = m.MyChildClass;

    return m;
}());